package com.dayu.springbootai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.InMemoryChatMemory;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * AI配置类
 * 用于配置聊天客户端和聊天内存相关的Bean
 * 
 * @author dayu
 * @create 2025-04-06 16:22
 */
@Configuration
public class AiConfig {
    /**
     * 创建聊天内存Bean
     * 用于存储对话历史记录，实现对话上下文记忆功能
     * InMemoryChatMemory是基于内存的实现方式
     * 
     * @return ChatMemory 聊天内存实例
     */
    @Bean
    public ChatMemory chatMemory(){
        return new InMemoryChatMemory();
    }

    /**
     * 创建聊天客户端Bean
     * 配置与Ollama AI模型的交互方式和参数
     * 
     * @param model Ollama聊天模型实例，由Spring AI自动配置
     * @param chatMemory 聊天内存实例，用于保存对话历史
     * @return ChatClient 配置好的聊天客户端
     */
    @Bean
    public ChatClient chatClient(OllamaChatModel model,ChatMemory chatMemory){
        return ChatClient.builder(model)
                // 设置AI助手的系统角色描述，定义AI的行为模式
                // 专门用于解答六爻相关问题，拒绝回答无关问题
                .defaultSystem("你是一个专业的六爻占卜师助手。你的任务是专门解答与六爻占卜相关的问题，包括但不限于：" +
                        "六爻基础知识、卦象解析、爻位分析、六亲用神、六爻排盘方法等。对于非六爻相关的问题，" +
                        "请礼貌地告知用户你只能回答六爻相关的问题。")
                // 配置默认的顾问(advisor)，用于增强聊天功能
                .defaultAdvisors(
                        // 简单日志顾问，用于记录聊天过程
                        new SimpleLoggerAdvisor(),
                        // 消息聊天内存顾问，用于管理对话历史
                        new MessageChatMemoryAdvisor(chatMemory))
                .build();

    }
}